/**
 * request 使用说明
 * 用于无 token 等请求
 * @param {String} url : 后端的请求地址
 * @param {String} tempFilePaths : 文件的临时地址
 * @param {Object} data: 请求的额外参数
 * @param {String} name: 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
 * @param {String} fileType: 文件类型，image/video/audio (仅支付宝小程序，且必填。)
 **/

import baseURL from "@/config/baseURL.js";
import getStateFn from "@/utils/state.js";

/**
 * 获取请求头信息
 **/
export function getHeaders() {
  return {};
}

function request({ url, tempFilePaths, data = {}, name = 'file' , fileType}) {
  return new Promise((resolve, reject) => {
    uni.uploadFile({
      url: baseURL + url,
			// #ifdef H5
			file: tempFilePaths,
			// #endif
			// #ifndef H5
			filePath: tempFilePaths,
			// #endif
      name,
      // #ifdef MP-ALIPAY
      fileType: fileType ? fileType : 'image',
      // #endif
      header: getHeaders(),
      formData: {
        ...data,
      },
      timeout: 5000,
      success: res => {
        // resolve; 控制台正常颜色输出
        // reject; 控制台 红色颜色输出
        if (res.data.code == 200) {
          // 控制台正常颜色输出
          resolve(res.data);
        }

        // 异常处理函数
        const stateOpt = getStateFn(res);
        if (stateOpt.state === 'waring') {
          // 控制台 红色颜色输出
          reject(res.data);
        }
      },
      fail: error => {
        reject(error);
      },
      complete: error => {
        // 关闭加载
        uni.hideLoading();
      },
    });
  });
}

export default request;
